package controles.interfaz;

import java.awt.Dimension;

import javax.swing.JInternalFrame;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.console.IConsoleConstants;

import com.asimasoft.cncRouter.VistaHerramientas;

import taladro.instrucciones.Instruccion;
import taladro.maquina.Herramienta;
import taladro.maquina.Maquina;
import taladro.proyecto.Proyecto;
import taladro.proyecto.TraductorArchivo;
import taladro.proyecto.TraductorArchivoDrill;
import taladro.proyecto.TraductorArchivoGerber;
import taladro.vista.proyecto.DlgTipArch;
import taladro.vista.proyecto.PanelPreview;
import taladro.vista.proyecto.PanelProyecto;
import taladro.vista.proyecto.PintorProyecto;

public class Abrir extends Action implements ISelectionListener,
		ActionFactory.IWorkbenchAction {

	private final IWorkbenchWindow window;
	private Proyecto proyecto;
	private TraductorArchivo traductor;
	private Maquina maquina;
	public PanelProyecto panelProyecto;
	public PanelPreview panelVistaPrevia;
	public JInternalFrame frame;
	public JInternalFrame framePreview;
	public final static String ID = "controles.interfaz.Abrir";

	public Abrir(IWorkbenchWindow window) {
		this.window = window;
		setId(ID);
		setText("&Abrir archivo");
		setToolTipText("Abrir un archivo DRILL o Gerber.");
		// setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipsercp.hyperbola",
		// IImagesKeys.ADD_CONTACT));
		window.getSelectionService().addSelectionListener(this);
	}

	public void dispose() {
		window.getSelectionService().removeSelectionListener(this);
	}

	public void selectionChanged(IWorkbenchPart part, ISelection incoming) {
	}

	public void run() {
		String[] extensiones;
		extensiones = new String[2];
		extensiones[0] = "*.GTL";
		extensiones[1] = "*.txt";
		Shell shell = new Shell(Display.getDefault());
		FileDialog dialog = new FileDialog(shell, 1);
		dialog.setFilterExtensions(extensiones);
		String fileSelected = dialog.open();
		DlgTipArch d = new DlgTipArch(window.getShell());
		int code = d.open();
		if (code == Window.OK) {
			if (d.getSeleccion().equals("drill")) {
				traductor = new TraductorArchivoDrill();
			} else if (d.getSeleccion().equals("gerber")) {
				traductor = new TraductorArchivoGerber();
			}
			maquina = new Maquina();
			proyecto = new Proyecto();
			proyecto.setMaquina(maquina);
			proyecto.cargaArchivo(fileSelected, traductor);
			Instruccion instruccion = proyecto.getAdminInstrucciones().getInstruccionActual();
			if (instruccion == null) {
				//panelProyecto.actDatosProyecto(0.0, 0.0);
				//panelProyecto.actDatosInst(0, "N/A");
				//panelProyecto.actDatosHerr(0, "N/A");
			} else {
			
				Dimension dim = new Dimension();
				proyecto.getDimProyecto(dim);
				//panelProyecto.actDatosProyecto(dim.width, dim.height);
				Herramienta herramienta = this.proyecto.getHerramientaAct();
				int numHerr = proyecto.getHerramientas().size();
				int numInst = proyecto.getAdminInstrucciones().getTotalInstrucciones();
				
				if (numHerr > 0) {
				//	panelProyecto.actDatosHerr(numHerr, "");
					
				} else{
				//panelProyecto.actDatosHerr(numHerr, herramienta.toString());
				//panelProyecto.actDatosInst(numInst, instruccion.toString());
				}
			}
			
			EditorVistaPreInput input = new EditorVistaPreInput(fileSelected);
			input.setProyecto(proyecto);
			IWorkbenchPage page = window.getActivePage();
			try {
				IEditorPart ed=page.openEditor(input, EditorVistaPre.ID);
			//	page.showView(VistaHerramientas.ID);
				//page.showView(VistaConsola.ID);				
				VistaHerramientas vista=(VistaHerramientas)page.findView(VistaHerramientas.ID);
				vista.setProyecto(proyecto.getNombArchivo());
				vista.setHerramientas(proyecto.getHerramientas());	
				vista.setEd(ed);
			} catch (PartInitException e) {
				e.printStackTrace();
			}
		}

	}

	public void vistaPreviaProyecto() {
		// ContApp contApp = AppTaladro.getApp().contApp;
		if (panelVistaPrevia == null) {
			panelVistaPrevia = new PanelPreview(proyecto);
			// panelVistaPrevia.proyecto = proyecto;
			framePreview = new JInternalFrame("Vista previa del proyecto");
			framePreview.getContentPane().add(panelVistaPrevia);
			framePreview.setSize(500, 500);
			framePreview.setClosable(true);
			framePreview.setIconifiable(true);
			framePreview.setResizable(true);
		}
		// framePreview.show();
		panelVistaPrevia.refreshZoom();
		framePreview.setVisible(true);
		// contApp.addComponentFrame(framePreview);
	}

}